import { isFun, IsFunType as _IsFunType } from './is-fun'

export const IsFunType_Name = 'IsFunType'

export type IsFunType = _IsFunType

import {
  limitCall,
  LimitCallExceedStrategyConst as _LimitCallExceedStrategyConst,
  LimitCallOptionsType as _LimitCallOptionsType,
  LimitCallType as _LimitCallType,
  LimitCallExceedStrategyConstType as _LimitCallExceedStrategyConstType
} from './limit-call'

export const LimitCallExceedStrategyConst_Name = 'LimitCallExceedStrategyConst'
export const LimitCallOptionsType_Name = 'LimitCallOptionsType'
export const LimitCallExceedStrategyConstType_Name = 'LimitCallExceedStrategyConstType'
export const LimitCallType_Name = 'LimitCallType'

export const LimitCallExceedStrategyConst = _LimitCallExceedStrategyConst
export type LimitCallOptionsType = _LimitCallOptionsType
export type LimitCallExceedStrategyConstType = _LimitCallExceedStrategyConstType
export type LimitCallType = _LimitCallType

import {
  throttleByLimit,
  ThrottleByLimitOptionsType as _ThrottleByLimitOptionsType,
  ThrottleByLimitType as _ThrottleByLimitType
} from './throttle-by-limit'

export const ThrottleByLimitOptionsType_Name = 'ThrottleByLimitOptionsType'
export const ThrottleByLimitType_Name = 'ThrottleByLimitType'

export type ThrottleByLimitOptionsType = _ThrottleByLimitOptionsType
export type ThrottleByLimitType = _ThrottleByLimitType

import {
  throttleByTime,
  ThrottleByTimeOptionsType as _ThrottleByTimeOptionsType,
  ThrottleByTimeType as _ThrottleByTimeType
} from './throttle-by-time'

export const ThrottleByTimeOptionsType_Name = 'ThrottleByTimeOptionsType'
export const ThrottleByTimeType_Name = 'ThrottleByTimeType'

export type ThrottleByTimeOptionsType = _ThrottleByTimeOptionsType
export type ThrottleByTimeType = _ThrottleByTimeType

export const FunUtil_Name = 'FunUtil'

export const FunUtil: {
  isFun: IsFunType
  limitCall: LimitCallType
  throttleByLimit: ThrottleByLimitType
  throttleByTime: ThrottleByTimeType
} = {
  isFun,
  limitCall,
  throttleByLimit,
  throttleByTime
}
